package 蓝桥杯算法;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class day06 {
    public static void main(String[] args) {
        int[] arr={1,2,3,2,3,4,2};
        int[] arr2={1,2,3,2,3,2,3,8};
        int[] arr3={1,2,5,0};
        day06 a=new day06();
      /* a.loop1(a.intersection(arr2,arr));
       a.loop1(a.intersection1(arr2,arr));*/
       a.loop1( a.twoSum(arr3,6));


    }
    public int[] intersection(int[] nums1,int[] nums2){//哈希表
        if(nums2==null||nums2.length==0||nums1==null||nums1.length==0) {
            return new int[0];
        }
        Set<Integer> set1=new HashSet<>();
        Set<Integer> set2=new HashSet<>();
        for(int i: nums1){
            set1.add(i);
        }
        for(int i:nums2){
            if(set1.contains(i)){
                set2.add(i);
            }
        }
        return set2.stream().mapToInt(x->x).toArray();
    }
    public int[] intersection1(int[] nums1,int[] nums2) {
        if (nums2 == null || nums2.length == 0 || nums1 == null || nums1.length == 0) {
            return new int[0];
        }
        Set<Integer> set1 = new HashSet<>();
        Set<Integer> set2 = new HashSet<>();
        for (int i : nums1) {
            set1.add(i);
        }
        for (int i : nums2) {
            if (set1.contains(i)) {
                set2.add(i);
            }
        }
        int j = 0;
        int[] arr = new int[set2.size()];
        for (int i : set2) {
            arr[j++] = i;
        }
        return arr;
    }
    public void loop1(int[] nums){
        for(int i: nums){
            System.out.println(i);
        }
    }
    public boolean ishappy(int n){
        Set<Integer> set=new HashSet<>();
        while(n!=1&&!set.contains(n)){//若包含则说明陷入循环
            set.add(n);//做记录
            n=getNextNumber(n);
        }
        return n==1;
    }
    public int getNextNumber(int n){
        int res=0;
        while(n>0){
            int temp=n%10;
            res+=temp*temp;
            n=n/10;
        }
        return res;
    }
    public int[] twoSum(int[] nums,int target) {//暴力算法
        int[] arr = new int[2];
        int sum=0;
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                sum = nums[i] + nums[j];
                if (sum == target) {
                   arr[0]=i;
                   arr[1]=j;
                   return arr;
                }
            }
        }
        return null;
    }
    public  int[] towSum1(int[] nums,int target){//Map
        int[] res=new int[2];
        if(nums==null||nums.length==0){
            return res;
        }
        Map<Integer,Integer> map=new HashMap<>();
        for(int i=0;i<nums.length;i++){
            int temp=target-nums[i];
            if(map.containsKey(temp)){
                res[1]=i;
                res[0]=map.get(temp);
                break;
            }
            map.put(nums[i],i);
        }
        return res;
    }
   public int fourSumCount(int[] nums1,int[] nums2,int[] nums3,int[] nums4){
        int res=0;
        Map<Integer,Integer> map=new HashMap<Integer,Integer>();
        for(int i:nums1){
            for(int j:nums2){
                int sum=i+j;
                map.put(sum,map.getOrDefault(sum,0)+1);
                //获取相关键的值
            }
        }
        for(int i:nums3){
            for(int j:nums4){
                res+=map.getOrDefault(0-i-j,0);
                //获取相关键的值
            }
        }
        return res;
   }
   public  boolean canConstruct(String s,String t) {
        if(s.length()>t.length()){
            return false;
        }
        char[] arr1=s.toCharArray();
        char[] arr2=t.toCharArray();
        char[] record=new char[arr2.length];
        for(char c:arr2){
            record[c-'a']++;
        }
        for(char c:arr1){
            record[c-'a']--;
        }
        for(int i:record){
            if(i<0){
                return false;
            }
        }
        return true;
   }


}



